package ifrn.agendaweb.jpa;

import ifrn.agendaweb.modelo.Usuario;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityNotFoundException;
import javax.persistence.NonUniqueResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.springframework.transaction.annotation.Transactional;

@Transactional
public class UsuarioJPA {

	private EntityManager em;

	@PersistenceContext
	public void setEm(EntityManager em) {
		this.em = em;
	}

	public void criar(Usuario modelo) {
		em.persist(modelo);
	}

	public Usuario recuperarPorId(Usuario modelo) throws PersistenciaException {
		try {
			return em.find(Usuario.class, modelo.getId());
		} catch (EntityNotFoundException notFound) {
			throw new PersistenciaException("Entidade buscada não é foi encontrada.");
		} catch (NonUniqueResultException nonUnique) {
			throw new PersistenciaException("A busca retornou mais de um resultado.");
		}
		
	}

	
	public List<Usuario> recuperarPorEmail(Usuario usuario) {
		try {
			Query query = em.createQuery("FROM Usuario u WHERE u.email = '"+ usuario.getEmail() +"'");
			return query.getResultList();
		} catch (Exception e) {
			return null;
		}
	}
	
	public Usuario recuperarPorLogin(Usuario usuario) {
		try {
			Query query = em.createQuery("FROM Usuario u WHERE u.login = '"+ usuario.getLogin() +"'");
			return (Usuario) query.getSingleResult();
		} catch (Exception e) {
			return null;
		}
	}

	
	public List<Usuario> recuperarTodos() {
		
		Query query = em.createQuery("FROM Usuario u");
		return query.getResultList();
	}

	public void atualizar(Usuario modelo) {
		em.merge(modelo);
	}

	public void deletar(Usuario modelo) throws PersistenciaException {
		try {
			modelo = this.recuperarPorId(modelo);
			em.remove(modelo);
		} catch (PersistenciaException pex ) {
			throw pex;
		}
	}

	
	


}
